/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package facades;

import entities.Almacen;
import entities.LineaInventarioAlmacen;
import entities.ProductoTalla;
import java.util.List;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
 *
 * @author damfercer
 */
@Stateless
public class LineaInventarioAlmacenFacade extends AbstractFacade<LineaInventarioAlmacen> {
    @PersistenceContext(unitName = "CorporatePU")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public LineaInventarioAlmacenFacade() {
        super(LineaInventarioAlmacen.class);
    }
    
    public LineaInventarioAlmacen getLineaInventarioDeAlmacen(Almacen a, ProductoTalla pt){
        LineaInventarioAlmacen lineaInventarioAlmacen=null;
        Query q=em.createNamedQuery("LineaInventarioAlmacen.findByProductoTallaYAlmacen",LineaInventarioAlmacen.class);
        q.setParameter("idProductoTalla", pt.getIdProductoTalla());
        q.setParameter("idAlmacen", a.getIdAlmacen());
        List<LineaInventarioAlmacen> resultados=q.getResultList();
        if(resultados!=null && !resultados.isEmpty()){
            lineaInventarioAlmacen=(LineaInventarioAlmacen)q.getResultList().get(0);
        }
        return lineaInventarioAlmacen;
    }
    
    public List<LineaInventarioAlmacen> getLineaInventarioDeAlmacenConProductoYCantidadOMas(ProductoTalla pt, Integer cantidad){
        Query q=em.createNamedQuery("LineaInventarioAlmacen.findByProductoTallaYCantidadMinima",LineaInventarioAlmacen.class);
        q.setParameter("idProductoTalla", pt.getIdProductoTalla());
        q.setParameter("cantidad", cantidad);
        return q.getResultList();
    }
    
    public List<LineaInventarioAlmacen> getLineaInventarioDeAlmacenConProductoYCantidadOMasSinAlmacen(ProductoTalla pt, Integer cantidad, Almacen a){
        Query q=em.createNamedQuery("LineaInventarioAlmacen.findByProductoTallaYCantidadMinimaSinAlmacen",LineaInventarioAlmacen.class);
        q.setParameter("idProductoTalla", pt.getIdProductoTalla());
        q.setParameter("cantidad", cantidad);
        q.setParameter("idAlmacen", a.getIdAlmacen());
        return q.getResultList();
    }
    
    public Integer getCantidadDeProductoTallaEnAlmacenes(ProductoTalla pt, List<Almacen> almacenes){
        Integer cantidad=0;
        if(almacenes!=null && !almacenes.isEmpty()){
            StringBuilder sb=new StringBuilder();
            sb.append("SELECT SUM(CANTIDAD) FROM linea_inventario_almacen WHERE PRODUCTO_TALLA=");
            sb.append(pt.getIdProductoTalla());
            sb.append(" AND ALMACEN IN(");
            int i=0;
            for (Almacen almacen : almacenes) {
                sb.append(almacen.getIdAlmacen());
                if(i!=almacenes.size()-1){
                    sb.append(", ");
                }
                i++;
            }
            sb.append(")");
            Query q=em.createNativeQuery(sb.toString());
            List<Number> sum=q.getResultList();
            if(sum.get(0)!=null){            
                cantidad=sum.get(0).intValue();
            }
        }
        return cantidad;
    }
    
}
